package project.service.impl;

import project.bean.RecordBean;
import project.bean.UserBean;
import project.dao.IRecordDAO;
import project.dao.IUserDAO;
import project.dao.impl.RecordDAOImpl;
import project.dao.impl.UserDAOImpl;
import project.service.IRecordService;
import project.service.IUserService;

import javax.swing.*;

public class UserServiceImpl implements IUserService {
    private IUserDAO userDAO = new UserDAOImpl();
    private IRecordDAO recordDAO = new RecordDAOImpl();

    /**
     * 登陆
     *
     * @param id  账号
     * @param pwd 密码
     * @return 用户对象，如果登陆失败，返回 null
     */
    @Override
    public UserBean login(String id, String pwd) {
        return userDAO.login(id, pwd);
    }

    /**
     * 存钱，同时添加交易明细
     *
     * @param id    账号
     * @param money 金额
     */
    @Override
    public void save(String id, double money) {
        userDAO.update(id, money);
        recordDAO.insert(new RecordBean(id, "存入金额", money));
    }

    /**
     * 取钱
     * 1、根据帐号查询用户对象
     * 2、判断用户余额是否超支，如果超支，返回false
     * 3、否则，完成余额减 少
     * 4、添加交易明细
     *
     * @param id    账号
     * @param money 金额
     * @return 取钱是否成功
     */
    @Override
    public boolean get(String id, double money) {
        //获取用户对象
        UserBean userBean = userDAO.getUserById(id);
        //判断余额是否充足
        if (userBean.getBalance() < money) {
            return false;
        }
        userDAO.update(id, -money);
        recordDAO.insert(new RecordBean(id, "取出金额", money));
        return true;
    }

    /**
     * 查询
     *
     * @param id 账号
     */
    @Override
    public UserBean query(String id) {
        return userDAO.getUserById(id);
    }

    /**
     * 转账
     * 1、判断转帐帐号是否存在，如果不存在，返回"转帐帐号不存在"
     * 2、判断登陆帐号余额是否充足，如果余额不足，返回“余额 不足”
     * 3、登陆帐号减少金额，转帐帐号添加金额
     * 4、登陆帐号添加转出交易记录，转帐帐号添加转入交易记录
     *
     * @param id      登陆账号
     * @param otherId 对方账号
     * @param money   金额
     * @return 转帐失败信息，如果转帐成功，返回null
     */
    @Override
    public String trans(String id, String otherId, double money) {
        //获取用户对象
        UserBean userBean = userDAO.getUserById(id);
        //获取对方用户对象
        UserBean otherUserBean = userDAO.getUserById(otherId);

        //转账条件判断
        if (id.equals(otherId)) {
            return "不能转给自己";
        }
        if (otherUserBean == null) {
            return "对方账户不存在";
        }
        if (userBean.getBalance() < money) {
            return "余额不足";
        }
        userDAO.update(id, -money);
        recordDAO.insert(new RecordBean(id, "对账号" + otherId + "转出金额", money));
        userDAO.update(otherId, money);
        recordDAO.insert(new RecordBean(otherId, id + "账号转入金额", money));
        return null;
    }
}
